package com.canyou.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.canyou.system.entity.org.OrgDetailVO;
import com.canyou.system.entity.org.OrgListVO;
import com.canyou.system.model.Organization;

import java.util.List;

/**
 * 机构服务类
 *
 * @author canyou
 * @since 2019-06-03
 */
public interface OrganizationService extends IService<Organization> {

    /**
     * 获取机构的树形
     *
     * @param orgName  公司名称
     * @param contacts 联系人
     * @return
     */
    List<OrgListVO> getOrgTree(String orgName, String contacts);

    /**
     * 判断机构名是否已存在
     *
     * @param orgName 机构名称
     * @param orgId   机构id
     * @return
     */
    boolean existOrg(String orgName, Long orgId);

    /**
     * 根据公司id获取父公司id
     *
     * @param orgId 机构id
     * @return
     */
    Long getOrgParentId(Long orgId);

    /**
     * 获取机构详情
     *
     * @param orgId 机构id
     * @return
     */
    OrgDetailVO getDetailById(Long orgId);

    /**
     * 根据父id获取未删除的子机构数
     *
     * @param parentId 父机构id
     * @return
     */
    long getChildCount(Long parentId);

    /**
     * 根据机构Id获取所属该机构的部门数
     *
     * @param orgId 机构id
     * @return
     */
    long getOrgDeptCount(Long orgId);

    /**
     * 根据机构Id获取用户数
     *
     * @param orgId 机构id
     * @return
     */
    long getOrgUserCount(Long orgId);

    /**
     * 根据机构Id删除机构, 物理删除
     *
     * @param orgId 机构id
     * @return
     */
    boolean removeById(Long orgId);

    /**
     * 递归构建 节点parentId为rootId的列表, 非树形结构
     *
     * @param rootId 根节点id
     * @return
     */
    List<OrgListVO> getOrgAndChildList(Long rootId);

    /**
     * 递归构建 节点parentId为rootId的id列表, 非树形结构
     *
     * @param rootId 根节点id
     * @return
     */
    List<Long> getOrgAndChildIdList(Long rootId);

}
